package cn.edu.ctbu.web.restcontroller;

import cn.edu.ctbu.web.domain.Admin;
import cn.edu.ctbu.web.domain.Student;
import cn.edu.ctbu.web.domain.Teacher;
import cn.edu.ctbu.web.service.AdminService;
import cn.edu.ctbu.web.service.StudentService;
import cn.edu.ctbu.web.service.TeacherService;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.List;

@RestController
@RequestMapping("/webapi/login")
public class LoginRestController {
    @Autowired
    StudentService studentService;
    @Autowired
    TeacherService teacherService;
    @Autowired
    AdminService adminService;

    /**
     * 学生登录接口
     * @param httpRequest HTTP请求对象，用于获取和设置会话信息。
     * @param no 学生学号，用于登录验证的用户名。
     * @param password 学生密码，用于登录验证的密码。
     * @return 登录结果，1表示登录成功，-1表示登录失败。
     */
    @GetMapping("/student")
    public int student(HttpServletRequest httpRequest, String no, String password){
        // 判断用户名和密码是否存在
        List<Student> students = studentService.findByNoAndPassword(no, password);

        // 如果存在，写入session
        if(students.size() > 0){
            HttpSession session = httpRequest.getSession();
            session.setAttribute("loginno", students.get(0).getNo());
            session.setAttribute("userid", students.get(0).getId());
            session.setAttribute("user", students.get(0));
            return 1;
        }
        // 如果不存在，返回出错
        else{
            return -1;
        }
    }

    /**
     * 教师登录接口
     * @param httpRequest HTTP请求对象，用于获取和设置会话信息。
     * @param no 教师编号，用于登录验证的用户名。
     * @param password 教师密码，用于登录验证的密码。
     * @return 登录结果，1表示登录成功，-1表示登录失败。
     */
    @GetMapping("/teacher")
    public int teacher(HttpServletRequest httpRequest, String no, String password){
        // 判断用户名和密码是否存在
        List<Teacher> teachers = teacherService.findByNoAndPassword(no, password);

        // 如果存在，写入session
        if(teachers.size() > 0){
            HttpSession session = httpRequest.getSession();
            session.setAttribute("loginno", teachers.get(0).getNo());
            session.setAttribute("userid", teachers.get(0).getId());
            session.setAttribute("user", teachers.get(0));
            return 1;
        }
        // 如果不存在，返回出错
        else{
            return -1;
        }
    }

    /**
     * 管理员登录接口
     * @param httpRequest 当前的HTTP请求对象，用于获取和设置会话信息。
     * @param no 管理员编号，用于登录验证的用户名。
     * @param password 管理员密码，用于登录验证的密码。
     * @return 登录结果，1表示登录成功，-1表示登录失败。
     */
    @GetMapping("/admin")
    public int admin(HttpServletRequest httpRequest, String no, String password){
        // 判断用户名和密码是否存在
        List<Admin> admins = adminService.findByNoAndPassword(no, password);

        // 如果存在，写入session
        if(admins.size() > 0){
            HttpSession session = httpRequest.getSession();
            session.setAttribute("loginno", admins.get(0).getNo());
            session.setAttribute("userid", admins.get(0).getId());
            session.setAttribute("user", admins.get(0));
            return 1;
        }
        // 如果不存在，返回出错
        else{
            return -1;
        }
    }

    /**
     * 获取登录的no数据
     * @param session 当前用户的会话对象
     * @return 包含登录no数据的JSON字符串，如果会话存在，则返回包含"loginno"键的JSON对象
     */
    @GetMapping("/getusersession")
    public String getUserSession(HttpSession session) {
        JSONObject jsonObject = new JSONObject();
        if(session!=null){
            jsonObject.put("loginno", session.getAttribute("loginno"));
        }
        return JSONObject.toJSONString(jsonObject);
    }

}
